/**
 * @param {string} s
 * @param {string} p
 * @return {boolean}
 */
//  var isMatch = function(s, p) {
//     let arrs=s.split('');
//     let arrp=p.split('');
//     let pich=arrs.shift()
//     let rech='',rechcount=0;
//     console.log(arrs,arrp);
//     for(let i=0;i<arrp.length;){
//         let ch = arrp[i]
//         if(p[i+1]=='*'){
//             rech=ch;
//             rechcount = 0;
//             while(pich==ch){
//                 pich=arrs.shift();
//                 rechcount++;
//             }
//             i+=2
//             console.log(1,i,ch,pich)
//         }
//         else if(ch == rech && rechcount>0){
//             i++;
//             console.log(2)
//         }
//         else if(ch=='.' || ch == pich){
//             i++;
//             pich=arrs.shift();
//             console.log(3,i,pich,ch)
//         }
//         else {
//             return false;
//         }
//     }
//     if(pich){
//         return false;
//     }
//     return true;
// };

var isMatch = function(s, p){
    // 动态规划
    let arr=new Array(s.length+1).fill(0).map(item=>new Array(p.length+1).fill(false))
    arr[0][0]=true;
    for(let j = 2; j <= p.length; j += 2)
            arr[0][j] = arr[0][j - 2] && p[j-1] == '*';
    for(let i=1;i<=s.length;i++){
        for(let j=1;j<=p.length;j++){
            if(p[j-1]=='*'){
                arr[i][j]=arr[i][j-2] || (arr[i-1][j] && s[i-1]==p[j-2]) || (arr[i-1][j] && '.'==p[j-2])
            }
            else if(p[j-1]=='.'){
                arr[i][j]=arr[i-1][j-1]
            }
            else{
                if(p[j-1]==s[i-1]){
                    arr[i][j]=arr[i-1][j-1]
                }
                else{
                    arr[i][j]=false;
                }
            }
        }
    }
    console.log(arr)
    return arr[s.length][p.length]
}

console.log(isMatch("aa","a*"))